


//===== 公共变量
var after_url = 'interface.php';








//===== 项目特定函数区


//### 检测前台登陆状态和token1
function CheckLoginBefore(){
	setInterval(function(){
		if(!sessionStorage.user || !sessionStorage.token1){
			//A('缺少必要参数！');
			location.replace('login.html');
		}
	},500);
}


//检测后台管理登陆用户
function CheckLoginAdmin(){
	setInterval(function(){
		if(!sessionStorage.admin_token1 || !sessionStorage.admin_user){
			location.replace('admin_login.html');
		}
	},300);
}







//==== 公共函数区

/*
	### 检测文件是否合法(大小，后缀) 
		参一：文件对象(必选)
		参二：文件大小(可选，默认500Kb)
		参三：文件后缀(可选，默认jpg,png,gif)
		return: 
			e1	文件类型不正确（参三使用默认时会检测文件类型)
			e2	文件大小超限
			e3	文件后缀不合法
			true 	通过检测返回true
		示例：
			img_select.onchange=function(){
				var file = img_select.files[0];
				alert(CheckFile(file,50000,['txt','zip']));
			}
*/
function CheckFile(file,size,file_exts){
	if(!size){
		var size = 500000;
	}
	if(!file_exts){
		var file_types = ['image/gif','image/jpeg','image/png'];	//文件类型过滤
		var file_exts = ['gif','GIF','jpeg','JPEG','jpg','JPG','png','PNG'];	//文件后缀过滤
		if(file_types.indexOf(file.type) < 0){
			return 'e1';
		}
	}
	if(file.size > size){
		return 'e2';
	}
	var ext = file.name.substring(file.name.lastIndexOf('.')+1);
	if(file_exts.indexOf(ext) < 0){
		return 'e3';
	}
	return true;
}












/*
	### 对操作进行确认
	参一：设定的操作码 ，默认为123
	说明：操作需要得到确认且输入操作码要与指定的操作码一致才可后续执行。
	示例：
		CheckControl();
		CheckControl(222);

*/
function CheckControl(pwd){
	if(!confirm('确认该操作?')){
		exit;
	}
	if(!pwd){
		var pwd = 123;
	}
	if(prompt('输入操作码！') != pwd){
		A('操作码不正确!');
		exit;
	}
}







/*
	### 获取当前cookie中指定字段的值
	### 参一：想要获取的字段名 如：uid
	### return: 成功：反回对应字段的cookie值，失败返回 err
	### 示例：
		当前页面cookie : a=aaa; b=bbb; c=ccc
		var key='b';
		alert(GetCookie(key));	//结果： bbb
*/
function GetCookie(key){
	//var p = '/'+key+'=([^;]*)?/';
	var p = '/^'+key+'=([^;]*)?| '+key+'=([^;]*)?/';
	if(res = document.cookie.match(eval(p))){
		//return res[1];
		if(res[1]){
			return res[1];
		}else{
			return res[2];
		}
	}else{
		return false;
	}
}






/*
	### 获取GET附带参数
	参一：key (string) GET传参的参名
	return 	成功返回参名对应的值，失败返回false
*/
function GetUrlParm(key){
	var p = '/'+key+'=([^&]*)/';
	if(res = document.URL.match(eval(p))){
		if(res[1]){
			return res[1];
		}else{
			return false;
		}
	}else{
		return false;
	}
}






/*
	### 蒙板提示框(提示时页面被盖不可操作)
	### 参一：提示内容
	### 需要：函数需要一个 id='notice' 的元素做容器
	### 示例：
		 <div id='Notice'></div>
		 Notice('信息发布成功！'); //开启提示框
		 Notice();	//关闭提示框
*/
var Notice_deg = 1;
var Notice_rotate;
function Notice(text){
	if(text){
		var str = "<div class='sca_Notice' style='z-index:100;position:fixed;top:0px;width:100%;height:100%;background:rgba(255,100,100,0.5)'><div id='notice_text' style='background:#fff;width:200px;margin:20% auto;text-align:center;padding:30px;border-radius:10px'><div class='sca_Notice_img' style='padding:10px;border-top:1px solid #bbb;border-right:1px solid #999;border-bottom:1px solid #666;display:inline-block;border-radius:25px'></div><div>"+text+"</div></div></div>";
		$('body').append(str);
		Notice_rotate = setInterval(function(){
			$(".sca_Notice_img").css({'transform':'rotate('+Notice_deg+'deg)'});
			Notice_deg +=25;
		},100)
	}else{
		//$('.sca_Notice').html('');
		$('.sca_Notice').remove();
		clearInterval(Notice_rotate);	
	}
}









/*
	### 点击切换验证码
	参一：图片元素对象
	参二：图片切换的时间延迟
	示例：
		<img src="xx.php?type=code" onclick='ChangeCode(this,2000)'>

*/
function ChangeCode(o,time){
	if(!time){
		var time = 1000;	
	}
	if(parseInt(sessionStorage.code_time)+time > new Date().getTime()){
		return;
	}
	var src = o.src+'&m='+Math.random();
	o.src = src;
	sessionStorage.code_time = new Date().getTime();
}







	
/*
	### 检测字段
	示例：
		Field_Check(/^.{3,20}$/,StoreMainEdit_Name,'js商户名长度为3-20个字符!');
*/
function Field_Check(p,str,notice){
	if(!p.test(str)){
		A(notice);exit;
	}
}








/*
	### 检测ip地址的格式是否正确
	参一：ip   要检测的内容
	return 	合法ip返回true ,非法返回false
*/
function ChacekIpFormart(ip){
	if(/^(([0-9])|([1-9][0-9])|([1][0-9]{2})|([2][0-5][0-5]))[.](([0-9])|([1-9][0-9])|([1][0-9]{2})|([2][0-5][0-5]))[.](([0-9])|([1-9][0-9])|([1][0-9]{2})|([2][0-5][0-5]))[.](([0-9])|([1-9][0-9])|([1][0-9]{2})|([2][0-5][0-5]))$/.test(ip)){
		return true;
	}else{
		return false;
	}
}









/*
	### 表单选择并读取文件，如是图片并显示
	参一：文件选择表单项的id
	参二：要显示图片的元素id,如果为空则不显示图片
	参三：回调(返回file或'err')
	示例：
		<input type='file' id='a' />
		<img src='' id='b' />
		SelectOrViewImg('a','b',function(f){
			alert(f);
		});
*/
function SelectOrViewImg(file_input_id,view_id,fun){
	var StoreMain_File = document.getElementById(file_input_id);
	var view_ele = document.getElementById(view_id);
	StoreMain_File.onchange=function(){
		var file = StoreMain_File.files[0];
		var reader = new FileReader();
		reader.onloadend = function(){
			if(view_id){	//如果指定了图片显示元素，则显示图片
				view_ele.src = reader.result;
			}
		}
		if(file){
			reader.readAsDataURL(file);
			fun(file);
		}else{
			fun('err');
		}
	};
}












/*
	### 检测并替换字串中的特殊字符为实体字符 (' , " , > , < , / , \)
	### 参一：源字串 
	### 参二：是否反解析,及分割特殊字符与数值
				空 为特殊字符转实体  默认
				1  为实体转字符
				1+ 将实体字符与数值的分割。如 &#392143 会产生乱码，分割为 &#39 2143
	### return : 返回替换后的字串
	### 示例：
		var content = $('textarea[name=content]').val().trim();
		content = ChangeChar(content);
		或
		ChangeChar(obj.info_title,1)
*/
function ChangeChar(val,stat){
	if(stat){
		if(stat > 1){
			if(/&#[0-9]{2,}/.test(val)){
				var p2 = /([^&#]*)(&#[0-9]{2})([0-9].*)/g;
				var val =  val.replace(p2,"$1$2 $3");
			}
			return val;
		}

		var p2 = /&#60/g;
		val = val.replace(p2,"<");
		var p2 = /&#62/g;
		val = val.replace(p2,">");
		var p2 = /&#39/g;
		val = val.replace(p2,"'");
		var p2 = /&#34/g;
		val = val.replace(p2,'"');
		var p2 = /&#47/g;
		val = val.replace(p2,"\/");
		var p2 = /&#92/g;
		val = val.replace(p2,"\\");
		var p2 = /&#59/g;
		val = val.replace(p2,";");
		var p2 = /&#40/g;
		val = val.replace(p2,"(");
		var p2 = /&#41/g;
		val = val.replace(p2,")");
		//var p2 = /&nbsp/g;
		//val = val.replace(p2," ");
		return val;
	}else{
		var p2 = /</g;
		val = val.replace(p2,"&#60");
		var p2 = />/g;
		val = val.replace(p2,"&#62");
		var p2 = /\'/g;
		val = val.replace(p2,"&#39");
		var p2 = /\"/g;
		val = val.replace(p2,"&#34");
		var p2 = /\//g;
		val = val.replace(p2,"&#47");
		var p2 = /\\/g;
		val = val.replace(p2,"&#92");
		var p2 = /;/g;
		val = val.replace(p2,"&#59");
		var p2 = /\(/g;
		val = val.replace(p2,"&#40");
		var p2 = /\)/g;
		val = val.replace(p2,"&#41");
		//var p2 = / /g;
		//val = val.replace(p2,"&nbsp");
		return val;
	}
}




















/*
	###   ajax 异步加载 (JQUERY方式)
	参一：要传送的数据
	参二：成功回调
	参三：请求的后台地址
	参四：是否异步.当无值时默认为异步，当有值时为同步
	参五：提交方式 默认为post,有值为get
	示例：
		var data = {
					token:t,
					type:type,
					openid:openid
				};

		 Ajax(data,function(res){
		 	alert(res);
		 });
		 或
		 },1);
*/
function Ajax(data,fun,url,async,stat){
	if(!stat){
		stat = 'post';
	}else{
		stat = 'get';
	}
	async = async?false:true;
	if(!url){
		url = 'interface.php';
	}
	$.ajax({
		url:url,
		type:stat,
		async:async,
		data:data,
		success:function(rq_res,rq_stat,rq_xhr){
			fun(rq_res,rq_stat,rq_xhr);
		},
		error:function(){
			fun('false');
		}
	});
}



//后台请求
function AjaxBefore(data,fun){
	data.token1 = sessionStorage.token1;
	data.user = sessionStorage.user;
	Ajax(data,function(res){
		fun(res);
	},'interface.php');
}





















/*
    ### 无限分页最新(无总页，效率分页*推荐*)
        参一：当前页
        参二：允许显示最大页码
        参三：成功的回调函数
        参四：>> 后翻的最大页码 (对应后台 $max_page)
        参五：当前页前后各显示的页数
		参六：指定要填充的元素id
        需要一个id为 fpage 的容器元素 如 <div style="text-align:center;margin:20px" id="fpage"> </div>
        示例：
			function ParseData(data){
				if(data.length < 1){
					max_page = pnow;
				}else{
					max_page = pnow+1;
				}
					......
				Fpage(pnow,max_page,function(p){
					pnow = p;
					ParseData();
				},1,1);
			}
*/
function Fpage(PageNo,max_page,fun,step,loop,ele) {
	if(!loop){
		loop=2;
	}
	if(!step){
		step=6;
	}
	PageNo = parseInt(PageNo);
    var start = PageNo - loop;
    if (start < 1) {
        start = 1;
    }
    var end = PageNo + loop;
    if(end > max_page){
    	end = max_page;
    }
    var fpage_str = '';
	if(PageNo > (loop+1)){
		fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo='1' >首页</a>";
	}
    for (var i = start; i <= end; i++) {

        if (PageNo == i) {
            fpage_str += "<a style='margin:5px;border:1px solid blue;padding:3px 5px;color:#fff;background:blue' PageNo=" + i + ">" + i + "</a>";
        } else {
            fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo=" + i + ">" + i + "</a>";
        }
    }
    var next = PageNo + step;
    if(next >= max_page){
    	next = max_page
    }
    //console.log(max_page);
	if(PageNo < max_page){
		fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo="+next+" >>></a>";
	}
	if(!ele){
		ele = '#fpage';
	}
	$(ele).html(fpage_str);
    $(ele+" a").click(function () {
    	if(PageNo == $(this).attr('PageNo')){
    		return;
    	}
        PageNo = $(this).attr('PageNo');
        fun(PageNo);
    });
}

var Notice_deg = 1;
var Notice_rotate;
function Notice(text){
	if(text){
		var str = "<div class='sca_Notice' style='z-index:100;position:fixed;top:0px;width:100%;height:100%;background:rgba(255,100,100,0.5)'><div id='notice_text' style='background:#fff;width:200px;margin:20% auto;text-align:center;padding:30px;border-radius:10px'><div class='sca_Notice_img' style='padding:10px;border-top:1px solid #bbb;border-right:1px solid #999;border-bottom:1px solid #666;display:inline-block;border-radius:25px'></div><div>"+text+"</div></div></div>";
		$('body').append(str);
		Notice_rotate = setInterval(function(){
			$(".sca_Notice_img").css({'transform':'rotate('+Notice_deg+'deg)'});
			Notice_deg +=25;
		},100)
	}else{
		//$('.sca_Notice').html('');
		$('.sca_Notice').remove();
		clearInterval(Notice_rotate);	
	}
}



function C(res){
	console.log(res);
}

function A(res){
	alert(res);
}



function trans_byte(byte){
	if(byte == 0){
		return '0B';
	}
    var KB = 1024;
    var MB = 1024 * KB;
    var GB = 1024 * MB;
    if (byte < KB) {
        return byte + "B";
    } else if (byte < MB) {
        return (byte / KB).toFixed(2) + "KB";
    } else if (byte < GB) {
        return (byte / MB).toFixed(2) + "MB";
    } else{
        return (byte / GB).toFixed(2) + "GB";
    }
}

